/* ****服务器**** */


// 引入模块
const http = require('http');
const url = require('url');
const fs = require('fs');
const querystring = require('querystring');
const {
    LOADIPHLPAPI
} = require('dns');


const hostname = '127.0.0.1'
const port = 3000


// 服务器封装
function startServer(route, handler) {
    // 服务器实例
    const server = http.createServer((req, res) => {
        res.statusCode = 200
        // res.setHeader('Content-Type', 'text/html;charset=utf-8')
        // console.log('请求路径为： '+req.url);
        // 接收get/post传过来的数据
        let qstr = []; //请求体
        req.on("error", function (err) { //请求发生错误时触发
            console.log(err);
        }).on("data", function (chunk) { //请求接收到数据时触发 每次调用事件都会给我一小块数据chunk
            //get 不会产生这个事件  post则会
            qstr.push(chunk)
        }).on("end", function () { //请求结束后触发
            // 请求接收到之后，可以从request.method中判断是get还是post请求，若是get，就把params响应回去，若是post就把data响应回去
            res.setHeader("Access-Control-Allow-Origin", "*"); //允许跨域

            let curl = new url.URL(req.url, `http://${hostname}:${port}`); // 初始化值
            // 路由路径：curl.pathname
            if (req.method === "POST") {
                //暂时没啥可做，先空着.数据已在qstr中了。
                qstr = Buffer.concat(qstr).toString(); //用Buffer.concat()方法将data片段合并，取字符串
                console.log('From Data里面的数据：  ' + qstr);
                // 对得到的数据进行拆分
             
                route(handler,req, res, curl.pathname, qstr);
            } else if (req.method === "GET") {
                //get数据在此qstr放着
                qstr = curl['searchParams'].toString() //返回搜索参数组成的字符串

                //以下路由处理。
                route(handler, req, res, curl.pathname, qstr);
            } else {
                console.log(req.method, ":这个方法的处理暂未考虑。");
                pipe404(res);
                return;


            }
            // console.log("完整的URL:", curl.href); //完整 URL 
        })

        function pipe404(res) {
            res.statusCode = 404;
            res.setHeader('Content-Type', 'text/html;charset=UTF-8');
            res.end("<h1 style='color:red;'>404:请求内容不存在或服务暂不支持！</h1>");
        }

    })


    //启动服务器，监听服务端口
    server.listen(port, hostname, () => {
        console.log(`请在空中旋转720度后用天灵盖打开服务器 http://${hostname}:${port}/`); //解析URL
    })
}



module.exports.startServer = startServer;